package org.ttitfly.workflow;

import java.util.Map;

import org.ttitfly.workflow.exception.NoSessionConnectedException;


/**
 * 会话管理器
 * 
 * <pre>
 * 会话必须成对连接和断开，如果连续多次连接了工作流服务器，意味着你的会话是嵌套的。
 * 例如：
 * Session session1 = sessionEstablishment.connect(); // 1
 * Session session2 = sessionEstablishment.connect(); // 2
 * 调用SessionHolder.currentSession(); //将返回session2
 * sessionEstablishment.disconnect(); //将session2与服务器的链接，session1还保持着链接
 * 再次调用SessionHolder.currentSession(); //返回session1
 * sessionEstablishment.disconnect();//将断开session1
 * 客户端所有操作通过session进行，session状态由服务器维护，如果需要可由SessionHolder.currentSession获取
 * </pre>
 * 
 * @author 潘海春
 * @version 2009-1-11
 */
public interface SessionEstablishment {

	/**
	 * 连接工作流服务器
	 * 
	 * @param principal
	 *            请求人
	 * @param data
	 *            所有会话请求数据
	 * @return
	 */
	Session connect(String principal, Map<String, Object> data);

	/**
	 * 与工作流服务器断开
	 * 
	 * @throws NoSessionConnectedException
	 *             没有会话时抛出异常
	 */
	void disconnect() throws NoSessionConnectedException;

}
